package powerup;

import java.awt.event.KeyEvent;
import java.util.Date;
import javax.swing.JLabel;
import nivel.Casillero;
import nivel.Nivel;

/**
 * Clase que modela una Flor
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */
public class Flor extends PowerUp {

	/**
	 * Constructor de Flor
	 * 
	 * @param n
	 *            nivel con el cual HongoVerde esta en relacion
	 * @param ca
	 *            casillero actual
	 */
	public Flor(Nivel n, Casillero ca) {
		super(n);
		casilleroActual = ca;
		label = new JLabel(nivel.getGrafica().getPanelEntidades().getIconos()
				.getFlor());
		label.setSize(16, 16);
		label.setLocation(casilleroActual.getX(), casilleroActual.getY());
	}

	/**
	 * Activa la Flor
	 */
	@Override
	public void activar() {
		super.activar();
		nivel.getTablero().agregarAlTablero(casilleroActual);
	}

	/**
	 * Modela la situacion en la que Mario agarra la Flor
	 * 
	 * Si Mario no tiene powerups, entonces se suma 5 puntos y Mario pasa a ser
	 * Mario Fiery
	 * 
	 * Si Mario tiene un powerup, entonces quiere decir que es SuperMario y se
	 * le sumaran 20 puntos. SuperMario pasa a ser MarioFiery.
	 * 
	 * Si Mario tiene dos powerups, entonces significa que ya se encuentra bajo
	 * los efectos de una Flor. Se suman 50 puntos.
	 */
	@Override
	public void agarrar() {
		
		if (nivel.getMario().cantPowerUps() == 0) {
			// ajusta la grafica de mario al tamanio de super mario
			// y cambia el skin
			nivel.getMario().agregarPowerUp(new HongoRojo(nivel, casilleroActual));
			
			HongoRojo hongo = new HongoRojo(nivel, casilleroActual);
			nivel.getMario().agregarPowerUp(hongo);
			nivel.getMario().agregarPowerUp(this);
			nivel.getMario().setControlGrande();
			// mario toma una flor estando pequenio +5
			nivel.getScore().modificarPuntaje(5);
		} else if (nivel.getMario().cantPowerUps() == 1) {
			// mario toma una flor estando grande +20
			nivel.getScore().modificarPuntaje(20);
			nivel.getMario().agregarPowerUp(this);
		} else if (nivel.getMario().cantPowerUps() == 2) {
			// mario toma una flor bajo efectos de otra flor +50
			nivel.getScore().modificarPuntaje(50);
		}
		
		if(!nivel.getMario().tieneEstrella()){
		setMarioFiery();
		}else{
			setMarioEstrella();
		}
		nivel.getGrafica().getPanelEntidades().eliminarEntidad(label);
		nivel.getTablero().eliminarDelTablero(casilleroActual.getCoordenada());

	}

	/**
	 * Al tener una Flor, Mario podra disparar bolas de fuego invocando a este
	 * metodo.
	 */
	public void accion() {
		Date d = new Date();
		if ((nivel.getControladorDisparos().cantidadBolas() < 2)
				|| ((d.getTime() - nivel.getControladorDisparos().getUltima()) >= 500)) {
			Casillero aux = new Casillero(nivel.getMario().getCasilleroActual()
					.getX() + 16, nivel.getMario().getCasilleroActual().getY());
			BolaDeFuego bola = new BolaDeFuego(nivel, aux);
			nivel.getControladorDisparos().agregarBola(bola);
			nivel.getGrafica().getPanelEntidades()
					.agregarEntidad(bola.getLabel());
			nivel.getControladorDisparos().setUltima(d.getTime());
		}
	}

	/**
	 * Metodo privado para establecer los valores graficos correspondientes de
	 * Mario Fiery
	 */
	private void setMarioFiery() {
		nivel.getGrafica().getPanelMario().setPanelSuperMario();
		nivel.getMario().setIcono(
				nivel.getMario().getSkins().getSpriteMarioFiery());

		int rumbo = nivel.getMario().getManejo().getLastKey();

		if (rumbo == KeyEvent.VK_LEFT) {
			nivel.getGrafica().getPanelMario().izquierda();
		} else {
			nivel.getGrafica().getPanelMario().derecha();
		}
	}
	private void setMarioEstrella(){
		nivel.getGrafica().getPanelMario().setPanelSuperMario();
		nivel.getMario().setIcono(nivel.getMario().getSkins().getSpriteSuperMarioEstrella());
		int rumbo = nivel.getMario().getManejo().getLastKey();

		if (rumbo == KeyEvent.VK_LEFT) {
			nivel.getGrafica().getPanelMario().izquierda();
		} else {
			nivel.getGrafica().getPanelMario().derecha();
		}
	}
	
}
